// pages/login/index.js
const app = getApp()

Page({
  data: {
    // 登录状态
    isLoggedIn: false,
    // 用户信息
    userInfo: null,
    // 隐私协议同意状态
    agreePrivacy: false,
    // 加载状态
    loading: false,
    // 页面标题
    pageTitle: '登录'
  },

  onLoad(options) {
    this.checkLoginStatus()
  },

  onShow() {
    this.checkLoginStatus()
  },

  /**
   * 检查登录状态
   */
  checkLoginStatus() {
    const userInfo = wx.getStorageSync('userInfo')
    const isLoggedIn = wx.getStorageSync('isLoggedIn')
    
    if (userInfo && isLoggedIn) {
      this.setData({
        isLoggedIn: true,
        userInfo: userInfo
      })
    }
  },

  /**
   * 自定义导航栏返回事件
   */
  onNavBack() {
    wx.navigateBack({
      delta: 1
    })
  },

  /**
   * 隐私协议复选框变化
   */
  onPrivacyChange(e) {
    this.setData({
      agreePrivacy: e.detail.value.length > 0
    })
  },

  /**
   * 查看隐私政策
   */
  onPrivacyTap() {
    wx.showModal({
      title: '隐私政策',
      content: '我们承诺保护您的个人隐私信息，仅用于提供更好的服务体验。您的个人信息仅用于账户识别和安全验证，不会用于其他商业用途。',
      showCancel: false,
      confirmText: '我知道了'
    })
  },

  /**
   * 查看用户协议
   */
  onUserAgreementTap() {
    wx.showModal({
      title: '用户协议',
      content: '欢迎使用圣义文化小程序。使用本服务即表示您同意遵守相关服务条款，我们将为您提供优质的文化服务体验。',
      showCancel: false,
      confirmText: '我知道了'
    })
  },

  /**
   * 获取手机号一键登录
   */
  async onGetPhoneNumber(e) {
    if (!this.data.agreePrivacy) {
      wx.showToast({
        title: '请先同意隐私政策和用户协议',
        icon: 'none',
        duration: 2000
      })
      return
    }

    // 检查是否用户拒绝授权
    if (e.detail.errMsg && e.detail.errMsg.includes('deny') || e.detail.errno) {
      wx.showToast({
        title: '需要授权才能登录',
        icon: 'none',
        duration: 2000
      })
      return
    }

    this.setData({ loading: true })

    try {
      const phoneCode = e.detail.code
      
      // 调用云函数进行登录（包含手机号验证）
      const cloudResult = await this.cloudLoginWithPhone(phoneCode)
      
      if (cloudResult && cloudResult.success) {
        // 保存用户信息到本地存储
        wx.setStorageSync('userInfo', cloudResult.data)
        wx.setStorageSync('isLoggedIn', true)

        // 更新页面状态
        this.setData({
          isLoggedIn: true,
          userInfo: cloudResult.data,
          loading: false
        })

        // 显示登录成功提示
        wx.showToast({
          title: '登录成功',
          icon: 'success',
          duration: 1500
        })

        // 延迟返回上一页
        setTimeout(() => {
          wx.navigateBack({ delta: 1 })
        }, 1500)
      } else {
        throw new Error(cloudResult?.message || '登录失败')
      }

    } catch (error) {
      console.error('登录失败:', error)
      
      let errorMessage = '登录失败，请重试'
      if (error.errMsg) {
        if (error.errMsg.includes('cloud function not found')) {
          errorMessage = '登录服务未部署，请联系管理员'
        } else if (error.errMsg.includes('network')) {
          errorMessage = '网络连接失败，请检查网络后重试'
        } else {
          errorMessage = error.errMsg
        }
      } else if (error.message) {
        errorMessage = error.message
      }
      
      wx.showToast({
        title: errorMessage,
        icon: 'none',
        duration: 3000
      })
    } finally {
      this.setData({ loading: false })
    }
  },

  /**
   * 已注册登录 - 检查用户是否存在并直接登录
   */
  async onExistingUserLogin() {
    if (!this.data.agreePrivacy) {
      wx.showToast({
        title: '请先同意隐私政策和用户协议',
        icon: 'none',
        duration: 2000
      })
      return
    }

    this.setData({ loading: true })

    try {
      // 获取微信登录凭证
      const loginRes = await this.wxLogin()
      
      // 调用云函数检查用户是否存在
      const checkResult = await this.checkExistingUser(loginRes.code)
      
      if (checkResult.success && checkResult.exists) {
        // 用户存在，直接登录
        const cloudResult = await this.cloudLogin(loginRes.code)
        
        if (cloudResult.success) {
          // 保存用户信息到本地
          wx.setStorageSync('userInfo', cloudResult.data)
          wx.setStorageSync('isLoggedIn', true)

          this.setData({
            isLoggedIn: true,
            userInfo: cloudResult.data,
            loading: false
          })

          wx.showToast({
            title: '登录成功',
            icon: 'success',
            duration: 1500
          })

          // 延迟返回上一页
          setTimeout(() => {
            wx.navigateBack({ delta: 1 })
          }, 1500)
        } else {
          throw new Error(cloudResult?.message || '登录失败')
        }
      } else {
        // 用户不存在
        this.setData({ loading: false })
        wx.showToast({
          title: '用户不存在，请注册',
          icon: 'none',
          duration: 2000
        })
      }

    } catch (error) {
      console.error('已注册登录失败:', error)
      this.setData({ loading: false })
      
      let errorMessage = '登录失败，请重试'
      if (error.errMsg) {
        if (error.errMsg.includes('cloud function not found')) {
          errorMessage = '登录服务未部署，请联系管理员'
        } else if (error.errMsg.includes('network')) {
          errorMessage = '网络连接失败，请检查网络后重试'
        } else {
          errorMessage = error.errMsg
        }
      } else if (error.message) {
        errorMessage = error.message
      }
      
      wx.showToast({
        title: errorMessage,
        icon: 'none',
        duration: 3000
      })
    }
  },

  /**
   * 微信登录获取code
   */
  wxLogin() {
    return new Promise((resolve, reject) => {
      wx.login({
        success: resolve,
        fail: reject
      })
    })
  },

  /**
   * 检查用户是否存在
   */
  async checkExistingUser(code) {
    return new Promise((resolve, reject) => {
      if (!wx.cloud) {
        reject(new Error('云开发未初始化'))
        return
      }

      wx.cloud.callFunction({
        name: 'checkUser',
        data: { code },
        success: res => {
          if (res.result) {
            resolve(res.result)
          } else {
            reject(new Error('云函数返回数据格式错误'))
          }
        },
        fail: error => {
          reject(error)
        }
      })
    })
  },

  /**
   * 云函数登录（带手机号验证）
   */
  async cloudLoginWithPhone(phoneCode) {
    return new Promise((resolve, reject) => {
      if (!wx.cloud) {
        reject(new Error('云开发未初始化'))
        return
      }

      wx.cloud.callFunction({
        name: 'login',
        data: { phoneCode },
        success: res => {
          if (res.result) {
            resolve(res.result)
          } else {
            reject(new Error('云函数返回数据格式错误'))
          }
        },
        fail: error => {
          reject(error)
        }
      })
    })
  },

  /**
   * 保留原有的微信登录方法（备用）
   */
  async cloudLogin(code) {
    return new Promise((resolve, reject) => {
      if (!wx.cloud) {
        reject(new Error('云开发未初始化'))
        return
      }

      wx.cloud.callFunction({
        name: 'login',
        data: { code },
        success: res => {
          if (res.result) {
            resolve(res.result)
          } else {
            reject(new Error('云函数返回数据格式错误'))
          }
        },
        fail: error => {
          reject(error)
        }
      })
    })
  },

  /**
   * 清除本地登录数据
   */
  clearLocalLoginData() {
    wx.removeStorageSync('userInfo')
    wx.removeStorageSync('isLoggedIn')
  },

  /**
   * 退出登录
   */
  onLogout() {
    wx.showModal({
      title: '确认退出',
      content: '确定要退出登录吗？',
      success: (res) => {
        if (res.confirm) {
          this.clearLocalLoginData()
          
          this.setData({
            isLoggedIn: false,
            userInfo: null
          })

          wx.showToast({
            title: '已退出登录',
            icon: 'success'
          })
        }
      }
    })
  }
})